package org.web.clientlistmanager.sdk.dto;

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;

/**
 * 用于包装客户端与服务端双向通信的请求对象。
 * */
@Setter
@Getter
public class ClmRequest<T> {

    /**
     * 版本号，默认为1.0。用于兼容不同版本的请求。
     * */
    private String version = "1.0";

    /**
     * 请求的标识，heartbeat事件为clientProcess下的uuid。
     * */
    @NotNull(message = "requestId 不能为空")
    private String requestId;

    /**
     * 事件名称，用于从BeanFactory获取Bean，处理逻辑。
     * 这个是双向的，服务端和客户端BeanFactory都可获取Bean。
     * */
    @NotNull(message = "eventName 不能为空")
    private String eventName;// 新增属性，用于标识处理器类型

    /**
     * 请求的发送时间，用于计算请求的延迟。格式是yyyy-MM-dd HH:mm:ss。
     * */
    private String sendTime;

    /**
     * 客户端产生的UUID，客户端启动时创建，且不允许修改，由客户端注册时提供。客户端与服务端的心跳交互，也是通过UUID进行交互。
     * org.web.clientlistmanager.client.domain.LocalClientProcessDO#getClientProcessUuid()
     * */
    private String clientProcessUuid;

    @NotNull(message = "content 不能为空")
    private T content;

    @Override
    public String toString() {
        return "ClmRequest{" +
                "version='" + version + '\'' +
                "requestId='" + requestId + '\'' +
                "eventName='" + eventName + '\'' +
                "clientProcessUuid='" + clientProcessUuid + '\'' +
                '}';
    }

}